const express = require('express')
const jwt = require('jsonwebtoken')
const { User } = require('../models')
const router = express.Router()

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key'

// 注册
router.post('/register', async (req, res) => {
  try {
    const { username, email, password } = req.body

    // 验证输入
    if (!username || !email || !password) {
      return res.status(400).json({ error: '请填写所有必填字段' })
    }

    // 检查用户是否已存在
    const existingUser = await User.findOne({
      where: {
        $or: [{ email }, { username }]
      }
    })

    if (existingUser) {
      return res.status(400).json({ error: '用户已存在' })
    }

    // 创建用户
    const user = await User.create({
      username,
      email,
      password
    })

    // 生成JWT
    const token = jwt.sign(
      { userId: user.id, email: user.email },
      JWT_SECRET,
      { expiresIn: '7d' }
    )

    res.status(201).json({
      message: '注册成功',
      token,
      user: user.toJSON()
    })
  } catch (error) {
    console.error('注册错误:', error)
    res.status(500).json({ error: '服务器错误' })
  }
})

// 登录
router.post('/login', async (req, res) => {
  try {
    const { email, password } = req.body

    // 验证输入
    if (!email || !password) {
      return res.status(400).json({ error: '请填写邮箱和密码' })
    }

    // 查找用户
    const user = await User.findOne({ where: { email } })
    if (!user) {
      return res.status(401).json({ error: '用户不存在' })
    }

    // 验证密码
    const isValidPassword = await user.validatePassword(password)
    if (!isValidPassword) {
      return res.status(401).json({ error: '密码错误' })
    }

    // 更新最后登录时间
    await user.update({ lastLoginAt: new Date() })

    // 生成JWT
    const token = jwt.sign(
      { userId: user.id, email: user.email },
      JWT_SECRET,
      { expiresIn: '7d' }
    )

    res.json({
      message: '登录成功',
      token,
      user: user.toJSON()
    })
  } catch (error) {
    console.error('登录错误:', error)
    res.status(500).json({ error: '服务器错误' })
  }
})

// 获取用户信息
router.get('/me', authenticateToken, async (req, res) => {
  try {
    const user = await User.findByPk(req.user.userId)
    if (!user) {
      return res.status(404).json({ error: '用户不存在' })
    }
    res.json({ user: user.toJSON() })
  } catch (error) {
    console.error('获取用户信息错误:', error)
    res.status(500).json({ error: '服务器错误' })
  }
})

// 更新用户信息
router.put('/me', authenticateToken, async (req, res) => {
  try {
    const { username, preferences } = req.body
    const user = await User.findByPk(req.user.userId)
    
    if (!user) {
      return res.status(404).json({ error: '用户不存在' })
    }

    await user.update({
      username: username || user.username,
      preferences: { ...user.preferences, ...preferences }
    })

    res.json({ message: '更新成功', user: user.toJSON() })
  } catch (error) {
    console.error('更新用户信息错误:', error)
    res.status(500).json({ error: '服务器错误' })
  }
})

// 中间件：验证JWT
function authenticateToken(req, res, next) {
  const authHeader = req.headers['authorization']
  const token = authHeader && authHeader.split(' ')[1]

  if (!token) {
    return res.status(401).json({ error: '未提供访问令牌' })
  }

  jwt.verify(token, JWT_SECRET, (err, user) => {
    if (err) {
      return res.status(403).json({ error: '无效的访问令牌' })
    }
    req.user = user
    next()
  })
}

module.exports = router
